package d_callable;

import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;

/**
 * MyCallableTest类用于演示如何使用Callable和FutureTask来执行带有返回值的任务。
 * @author Cheng-02
 * @version V1.0
 * @Package d_callable
 * @date 2024/4/7 下午8:37
 */
public class MyCallableTest {
    public static void main(String[] args) {
        // 创建MyCallable实例，它实现了Callable接口，用于定义将要执行的任务
        MyCallable myCallable = new MyCallable();
        // 使用MyCallable实例创建一个FutureTask，FutureTask是一个可以带返回值的Runnable
        FutureTask<Integer> futureTask = new FutureTask<>(myCallable);
        // 创建一个新的线程并启动它，让它执行FutureTask
        new Thread(futureTask).start();
        // 调用get方法阻塞当前线程，直到任务执行完成并返回结果
        try {
            System.out.println(futureTask.get());
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 实现Callable接口的call方法，定义具体任务的逻辑。
     * @return 返回任务执行的结果，这里返回的是一个整数。
     * @throws Exception 如果任务执行过程中发生异常，则抛出Exception。
     */
    static class MyCallable implements Callable<Integer> {
        @Override
        public Integer call() throws Exception {
            // 这里是任务的具体逻辑，当前只是简单返回0
            return 0;
        }
    }
}
